/*
 * Copyright (c) 2007 by Chances.
 * $CVSHeader: chances-commons/javasrc/commons/chances/commons/template/TemplateEngine.java,v 1.1 2009/07/14 08:14:49 libf Exp $
 * $Author: libf $
 * $Date: 2009/07/14 08:14:49 $
 * $Revision: 1.1 $
 */
package chances.epg.commons.template;

import java.io.Writer;
import java.util.Collection;
import java.util.Map;

/**
 * 模板引擎.
 * 
 * @author <a href="mailto:libf@chances.com.cn">libf</a>
 */
public interface TemplateEngine {
    /**
     * 将指定实体按模板进行转换. 模板文件按照实体类名进行查找.
     * 
     * @param obj
     *            要转换的实体.
     * @param writer
     *            用于存放转换结果的输出流.
     */
    void execute(Object obj, Writer writer);

    /**
     * 将指定实体按模板进行转换.
     * 
     * @param vmName
     *            指定模板文件路径.
     * @param obj
     *            要转换的实体.
     * @param writer
     *            用于存放转换结果的输出流.
     */
    void execute(String vmName, Object obj, Writer writer);

    /**
     * 将实体列表按模板进行转换. 模板文件按照实体类名进行查找.
     * 
     * @param collection
     *            实体列表.
     * @param writer
     *            用于存放转换结果的输出流.
     */
    void execute(Collection<?> collection, Writer writer);

    /**
     * 按传输参数按模板进行转换.
     * 
     * @param props
     *            传入参数.
     * @param vmName
     *            指定的模板文件路径.
     * @param writer
     *            用于存放转换结果的输出流.
     */
    void execute(Map<?, ?> props, String vmName, Writer writer);

    /**
     * 将实体列表按模板进行转换.
     * 
     * @param collection
     *            实体列表.
     * @param vmName
     *            指定的模板文件路径.
     * @param writer
     *            用于存放转换结果的输出流.
     */
    void execute(Collection<?> collection, String vmName, Writer writer);
}
